package com.xz.example;

import com.xz.example.factory.LoggerFactory;
import com.xz.example.util.Logger;
import com.xz.example.util.XMLUtil;

/**
 * @author 张志航     
 * @version V1.0.0
 * @projectName design_mode
 * @title     Client   
 * @package    com.xz.example  
 * @date   2019/11/26 18:47  
 * @explain
 */
public class Client {

    /**
     * 模拟客户类
     * 需求:
     * 现有一个日志记录器,要求可以通过多种途径保存日志,如: 通过文件记录\通过数据库记录,日志记录器需要一些初始化工作,
     * 且这些初始化参数的设置过程较为复杂,而且某些参数设置有严格的现后顺序,否则可能发生记录失败,为了更好的封装记录器的初始化过程
     * 并保证多种记录器切换的灵活性,要求使用工厂方法模式设计改系统,常见的日志记录工具有SLF4J,Log4j等.
     * <p>
     * 分析:
     * 首先需要将记录日志的方法提取出来作为接口(抽象产品类Product),各种日志记录方式实现该接口的记录日志方法(具体产品ConcreteProduct),
     * 一个可以生产各种不同记录日志的工厂接口(抽象工厂类Factory),具体生产对象的类(具体工厂类ConcreteFactory).
     *
     * @param args
     */
    public static void main(String[] args) {

        Object bean = XMLUtil.getBean();
        if (bean != null && bean instanceof LoggerFactory){
            LoggerFactory loggerFactory = (LoggerFactory) bean;
            Logger logger = loggerFactory.createLogger();
            logger.writeLog();
        }
    }

}
